home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / mozilla-firefox / include / js / jsxdrapi.h < prev    next >
C/C++ Source or Header  |  2006-05-08  |  6KB  |  194 lines

  1. /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  2.  *
  3.  * ***** BEGIN LICENSE BLOCK *****
  4.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  5.  *
  6.  * The contents of this file are subject to the Mozilla Public License Version
  7.  * 1.1 (the "License"); you may not use this file except in compliance with
  8.  * the License. You may obtain a copy of the License at
  9.  * http://www.mozilla.org/MPL/
  10.  *
  11.  * Software distributed under the License is distributed on an "AS IS" basis,
  12.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  13.  * for the specific language governing rights and limitations under the
  14.  * License.
  15.  *
  16.  * The Original Code is Mozilla Communicator client code, released
  17.  * March 31, 1998.
  18.  *
  19.  * The Initial Developer of the Original Code is
  20.  * Netscape Communications Corporation.
  21.  * Portions created by the Initial Developer are Copyright (C) 1998
  22.  * the Initial Developer. All Rights Reserved.
  23.  *
  24.  * Contributor(s):
  25.  *
  26.  * Alternatively, the contents of this file may be used under the terms of
  27.  * either of the GNU General Public License Version 2 or later (the "GPL"),
  28.  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  29.  * in which case the provisions of the GPL or the LGPL are applicable instead
  30.  * of those above. If you wish to allow use of your version of this file only
  31.  * under the terms of either the GPL or the LGPL, and not to allow others to
  32.  * use your version of this file under the terms of the MPL, indicate your
  33.  * decision by deleting the provisions above and replace them with the notice
  34.  * and other provisions required by the GPL or the LGPL. If you do not delete
  35.  * the provisions above, a recipient may use your version of this file under
  36.  * the terms of any one of the MPL, the GPL or the LGPL.
  37.  *
  38.  * ***** END LICENSE BLOCK ***** */
  39.  
  40. #ifndef jsxdrapi_h___
  41. #define jsxdrapi_h___
  42.  
  43. /*
  44.  * JS external data representation interface API.
  45.  *
  46.  * The XDR system is comprised of three major parts:
  47.  *
  48.  * - the state serialization/deserialization APIs, which allow consumers
  49.  *   of the API to serialize JS runtime state (script bytecodes, atom maps,
  50.  *   object graphs, etc.) for later restoration.  These portions
  51.  *   are implemented in various appropriate files, such as jsscript.c
  52.  *   for the script portions and jsobj.c for object state.
  53.  * - the callback APIs through which the runtime requests an opaque
  54.  *   representation of a native object, and through which the runtime
  55.  *   constructs a live native object from an opaque representation. These
  56.  *   portions are the responsibility of the native object implementor.
  57.  * - utility functions for en/decoding of primitive types, such as
  58.  *   JSStrings.  This portion is implemented in jsxdrapi.c.
  59.  *
  60.  * Spiritually guided by Sun's XDR, where appropriate.
  61.  */
  62.  
  63. #include "jspubtd.h"
  64. #include "jsprvtd.h"
  65.  
  66. JS_BEGIN_EXTERN_C
  67.  
  68. /* We use little-endian byteorder for all encoded data */
  69.  
  70. #if defined IS_LITTLE_ENDIAN
  71. #define JSXDR_SWAB32(x) x
  72. #define JSXDR_SWAB16(x) x
  73. #elif defined IS_BIG_ENDIAN
  74. #define JSXDR_SWAB32(x) (((uint32)(x) >> 24) |                                \
  75.                          (((uint32)(x) >> 8) & 0xff00) |                      \
  76.                          (((uint32)(x) << 8) & 0xff0000) |                    \
  77.                          ((uint32)(x) << 24))
  78. #define JSXDR_SWAB16(x) (((uint16)(x) >> 8) | ((uint16)(x) << 8))
  79. #else
  80. #error "unknown byte order"
  81. #endif
  82.  
  83. #define JSXDR_ALIGN     4
  84.  
  85. typedef enum JSXDRMode {
  86.     JSXDR_ENCODE,
  87.     JSXDR_DECODE,
  88.     JSXDR_FREE
  89. } JSXDRMode;
  90.  
  91. typedef enum JSXDRWhence {
  92.     JSXDR_SEEK_SET,
  93.     JSXDR_SEEK_CUR,
  94.     JSXDR_SEEK_END
  95. } JSXDRWhence;
  96.  
  97. typedef struct JSXDROps {
  98.     JSBool      (*get32)(JSXDRState *, uint32 *);
  99.     JSBool      (*set32)(JSXDRState *, uint32 *);
  100.     JSBool      (*getbytes)(JSXDRState *, char *, uint32);
  101.     JSBool      (*setbytes)(JSXDRState *, char *, uint32);
  102.     void *      (*raw)(JSXDRState *, uint32);
  103.     JSBool      (*seek)(JSXDRState *, int32, JSXDRWhence);
  104.     uint32      (*tell)(JSXDRState *);
  105.     void        (*finalize)(JSXDRState *);
  106. } JSXDROps;
  107.  
  108. struct JSXDRState {
  109.     JSXDRMode   mode;
  110.     JSXDROps    *ops;
  111.     JSContext   *cx;
  112.     JSClass     **registry;
  113.     uintN       numclasses;
  114.     uintN       maxclasses;
  115.     void        *reghash;
  116.     void        *userdata;
  117. };
  118.  
  119. extern JS_PUBLIC_API(void)
  120. JS_XDRInitBase(JSXDRState *xdr, JSXDRMode mode, JSContext *cx);
  121.  
  122. extern JS_PUBLIC_API(JSXDRState *)
  123. JS_XDRNewMem(JSContext *cx, JSXDRMode mode);
  124.  
  125. extern JS_PUBLIC_API(void *)
  126. JS_XDRMemGetData(JSXDRState *xdr, uint32 *lp);
  127.  
  128. extern JS_PUBLIC_API(void)
  129. JS_XDRMemSetData(JSXDRState *xdr, void *data, uint32 len);
  130.  
  131. extern JS_PUBLIC_API(uint32)
  132. JS_XDRMemDataLeft(JSXDRState *xdr);
  133.  
  134. extern JS_PUBLIC_API(void)
  135. JS_XDRMemResetData(JSXDRState *xdr);
  136.  
  137. extern JS_PUBLIC_API(void)
  138. JS_XDRDestroy(JSXDRState *xdr);
  139.  
  140. extern JS_PUBLIC_API(JSBool)
  141. JS_XDRUint8(JSXDRState *xdr, uint8 *b);
  142.  
  143. extern JS_PUBLIC_API(JSBool)
  144. JS_XDRUint16(JSXDRState *xdr, uint16 *s);
  145.  
  146. extern JS_PUBLIC_API(JSBool)
  147. JS_XDRUint32(JSXDRState *xdr, uint32 *lp);
  148.  
  149. extern JS_PUBLIC_API(JSBool)
  150. JS_XDRBytes(JSXDRState *xdr, char *bytes, uint32 len);
  151.  
  152. extern JS_PUBLIC_API(JSBool)
  153. JS_XDRCString(JSXDRState *xdr, char **sp);
  154.  
  155. extern JS_PUBLIC_API(JSBool)
  156. JS_XDRCStringOrNull(JSXDRState *xdr, char **sp);
  157.  
  158. extern JS_PUBLIC_API(JSBool)
  159. JS_XDRString(JSXDRState *xdr, JSString **strp);
  160.  
  161. extern JS_PUBLIC_API(JSBool)
  162. JS_XDRStringOrNull(JSXDRState *xdr, JSString **strp);
  163.  
  164. extern JS_PUBLIC_API(JSBool)
  165. JS_XDRDouble(JSXDRState *xdr, jsdouble **dp);
  166.  
  167. extern JS_PUBLIC_API(JSBool)
  168. JS_XDRValue(JSXDRState *xdr, jsval *vp);
  169.  
  170. extern JS_PUBLIC_API(JSBool)
  171. JS_XDRScript(JSXDRState *xdr, JSScript **scriptp);
  172.  
  173. extern JS_PUBLIC_API(JSBool)
  174. JS_XDRRegisterClass(JSXDRState *xdr, JSClass *clasp, uint32 *lp);
  175.  
  176. extern JS_PUBLIC_API(uint32)
  177. JS_XDRFindClassIdByName(JSXDRState *xdr, const char *name);
  178.  
  179. extern JS_PUBLIC_API(JSClass *)
  180. JS_XDRFindClassById(JSXDRState *xdr, uint32 id);
  181.  
  182. /*
  183.  * Magic numbers.
  184.  */
  185. #define JSXDR_MAGIC_SCRIPT_1        0xdead0001
  186. #define JSXDR_MAGIC_SCRIPT_2        0xdead0002
  187. #define JSXDR_MAGIC_SCRIPT_3        0xdead0003
  188. #define JSXDR_MAGIC_SCRIPT_4        0xdead0004
  189. #define JSXDR_MAGIC_SCRIPT_CURRENT  JSXDR_MAGIC_SCRIPT_4
  190.  
  191. JS_END_EXTERN_C
  192.  
  193. #endif /* ! jsxdrapi_h___ */
  194.